#ifndef ADMINMANAGER_H
#define ADMINMANAGER_H

#include <QObject>
#include <QString>
#include <QVariantList>
#include <QVariantList>
#include "sqloperator.h"

class AdminManager : public QObject
{
    Q_OBJECT
public:
    // 使用现有数据库连接的构造函数
    explicit AdminManager(SqlOperator *dbOperator, QObject *parent = nullptr);
    // 旧构造函数，保留以兼容现有代码
    explicit AdminManager(QObject *parent = nullptr);

    ~AdminManager();

    // 添加新员工
    bool addEmployee(const QString &empId, const QString &empName, const QString &gender,
                     const QString &position, int deptId, const QString &username,
                     const QString &password);

    // 查找员工
    QList<QVariantList> searchEmployees(const QString &empId, const QString &empName, const QString &department);
    // 员工离职
    bool removeEmployee(const QString &empId);
    bool processEvaluationLeaveCount(const QString &requestId);
    QString getEmpIdByRequestId1(const QString &requestId, SqlOperator *dbOperator);
    // 查看指定日期范围内全体员工的工资详情
    QList<QVariantList> getSalaryDetailsByDate(const QString &startDate, const QString &endDate);
    // 查看指定月份和部门的工资详情
    QList<QVariantList> getSalaryDetailsByMonthAndDept(const QString &month, int deptId);
    // 查看员工打卡详
    QList<QVariantList> getEmployeeAttendance(const QString &empId, const QString &startDate, const QString &endDate);
    // 查看待审核的部门调换申请
    QList<QVariantList> getPendingTransferRequests();
    // 同意部门调换申请
    bool approveTransferRequest(const QString &requestId);
    // 不同意部门调换申请
    bool rejectTransferRequest(const QString &requestId);
    // 查看待审核的请假申请
    QList<QVariantList> getPendingLeaveRequests();
    // 同意请假申请
    bool approveLeaveRequest(const QString &requestId);
    // 按部门发放工资
    bool distributeSalaryByDept(int deptId, const QString &paymentPeriod);
    // 发放全体员工工资
    bool distributeAllSalaries(const QString &paymentPeriod);
    // 不同意请假申请
    bool rejectLeaveRequest(const QString &requestId);

    // 查看全体员工月考核信息
    QList<QVariantList> getAllEmployeesMonthlyAssessment(const QString &evalPeriod, int deptId = -1);

    // 部门管理相关方法
    // 查看所有部门信息
   QList<QVariantList> getAllDepartments();
    // 查看特定部门的人员信息
    QList<QVariantList> getDepartmentEmployees(int deptId);
    // 添加新部门
    bool addDepartment(const QString &deptName, const QString &managerId);
    // 删除部门
    bool deleteDepartment(int deptId);

signals:
    // 操作结果信号
    void operationResult(bool success, const QString &message);

private:
    SqlOperator *m_dbOperator;
    bool m_ownsDbOperator; // 跟踪是否拥有数据库操作器实例
    bool initDatabase();

};

#endif // ADMINMANAGER_H
